package com.design.proxy;

/**
 * @author leali
 * @title: ProxySearcher
 * @projectName design
 * @description: 代理查询类，充当代理主题角色，它是查询代理，维持了对RealSearcher对象、AccessValidator对象和Logger对象的引用
 * @date 2022/1/3 1:31
 */
public class ProxySearcher implements Searcher {
    /**
     * 创建访问验证对象并调用其Validate()方法实现身份验证
     *
     * @param userName userName
     * @return 是否登录成功
     */
    public boolean validate(String userName) {
        return new AccessValidator().validate(userName);
    }

    /**
     * 创建日志记录对象并调用其Log()方法实现日志记录
     *
     * @param userName userName
     */
    public void log(String userName) {
        new Logger().log(userName);
    }

    @Override
    public String doSearch(String userName, String keyword) {
        //如果身份验证成功，则执行查询
        if (this.validate(userName)) {
            //调用真实主题对象的查询方法
            String result = new RealSearcher().doSearch(userName, keyword);
            //记录查询日志
            this.log(userName);
            return result;
        } else {
            return null;
        }
    }
}
